//路径总和
class Solution {
public:
    bool hasPathSum(TreeNode* root, int targetSum) {
        if(root==nullptr)
        {
            return false;
        }
        if(root->left ==nullptr && root->right==nullptr)
        {
            return targetSum-root->val ==0;
        }
        return hasPathSum(root->left,targetSum-root->val) || hasPathSum(root->right,targetSum-root->val);
    }
};


//给你一个字符串数组 tokens ，表示一个根据 逆波兰表示法 表示的算术表达式。
//请你计算该表达式。返回一个表示表达式值的整数。
class Solution {
public:


    int evalRPN(vector<string>& tokens) {
        stack<int> v;
        map<string,function<int(int,int)>> opFunc={
            {"+",[](int x,int y)->int{return x+y;}},
            {"-",[](int x,int y)->int{return x-y;}},
            {"*",[](int x,int y)->int{return x*y;}},
            {"/",[](int x,int y)->int{return x/y;}},
        };

        for(auto& str:tokens)
        {
            if(opFunc.count(str)==0)  //没有找到四个符号中一种，操作数入栈
            {
                v.push(stoi(str));
            }
            else  //找到了操作符
            {
                int left = v.top();
                v.pop();
                int right = v.top();
                v.pop();
                v.push(opFunc[str](right,left));
            }
        }
        return v.top();
    }
};